
/* $Id: incipit.c 12 2009-12-29 15:50:19Z calicant $ */

#include "edilana.h"

#ifdef AMIGA
extern struct Catalog *catalog;
#endif

static void maketemp(char *s, char *def, char *tempdir)
{
    strcpy(s, tempdir);
    strcat(s, def);
}

extern struct Setup *conf;

/*
 * Si aprono i lavori:
 *  argomenti dalla linea di comando;
 *  apertura di logfile, configfile, lista nomi con relativi messaggi;
 *  ricerca e stampa delle candidate dal vocabolario;
 *  ritorna la max lung delle candidate
 */
int
Incipit (
    int  argc,
    char *argv[],
    char *comando,
    int  tab[],
    int  *Lungh,
    int  *Candi,
    struct FirmaNome *np[],
    int  ContaAnag[],
    int  *numnomi
) {
char    stemp[MAXSTRLEN];
int Maxls = 0, i, fvoc = 0, flog = 0, fls = 0,
    fnome = 0, frndnome = 0, config = 0;
    

    /* se esiste il file di configurazione comandi, andiamo a vedere... */      
    config = ConfigfileSetup(comando);

    if (config) {
        if (!conf->random && !conf->nome)
            if (argc == 1) Version();

        strcpy(comando, conf->comando);
    };


	/* TODO: questi controlli presto se ne andanno: servono a dare un dizionario inglese se il locale non e' italiano */
	#ifdef AMIGA
        if (!catalog) {

			if (strcmp(conf->vocabolario, "lemmari/lemmi.the") == 0)
				strcat(conf->vocabolario, ".words");

			if (strcmp(conf->lemmario, "lemmari/lemmi.the") == 0)
				strcat(conf->lemmario, ".words");
		}
	#endif

    maketemp(NOMECANDI, NOMECANDI_DEF, conf->tempdir);
    maketemp(NOMERESTO, NOMERESTO_DEF, conf->tempdir);
    maketemp(NOMEANAGS, NOMEANAGS_DEF, conf->tempdir);
    maketemp(NOMENOMIB, NOMENOMIB_DEF, conf->tempdir);
    maketemp(ALTRECANDI, ALTRECANDI_DEF, conf->tempdir);
    maketemp(ALTRORESTO, ALTRORESTO_DEF, conf->tempdir);
    maketemp(ALIASCANDI, ALIASCANDI_DEF, conf->tempdir);
    maketemp(TEMPFILE, TEMPFILE_DEF, conf->tempdir);
    maketemp(LemmaCandy, LEMMACANDY_DEF, conf->tempdir);


#if DEBUG == 1

    fprintf(stdout,
        "tempdir\t%s\n"
        "logfile\t%s\n"
        "vocabol\t%s\n"
        "listano\t%s\n"
        "vocabno\t%s\n"
        "altrovo\t%s\n"
        "lemmari\t%s\n"
        "comando\t%s\n"
        "colorpr\t%d\n"
        "colores\t%d\n"
        "numcolo\t%d\n"
        "numrigh\t%d\n"
        "modor\t%d\n"
        "datalog\t%d\n"
        "random\t%d\n"
        "nomeco\t%s\n"
        "nomi\t%d\n"
        "minlenw\t%d\n"
        "minlenc\t%d\n"
        "truncan\t%d\n"
        "configf\t%s\n"
        "conflag\t%d\n"
        "sortcmd\t%s\n"
        "uniqcmd\t%s\n"
        "catcmd\t%s\n"
        "anagcmd\t%s\n",
        conf->tempdir,
        conf->logfile,
        conf->vocabolario,
        conf->listanomi,
        conf->vocabnomi,
        conf->altrovocab,
        conf->lemmario,
        conf->comando,
        conf->colorprompt,
        conf->coloresto,
        conf->numcolonne,
        conf->numrighe,
        conf->modor,
        conf->datalog,
        conf->random,
        conf->nomecognome,
        conf->nome,
        conf->minlenw,
        conf->minlencandy,
        conf->truncandy,
        conf->configfile,
        conf->configflag,
        conf->sortcmd,
        conf->uniqcmd,
        conf->catcmd,
        conf->anagcmd
    );
#endif




    /* prendiamo gli argomenti dalla linea di comando */
    for (i = 1; i <argc; i++) {
                if (!strcmp(argv[i],"-voc") && !fvoc && i+1 < argc) {
            strcpy(conf->vocabolario,argv[++i]);
            fvoc = 1;
        }
        else if (!strcmp(argv[i],"-log") && !flog && i+1 < argc) {
            strcpy(conf->logfile,argv[++i]);
            flog = 1;
        }
        else if (!strcmp(argv[i],"-nomi") && !fls && i+1 < argc) {
            strcpy(conf->listanomi,argv[++i]);
            fls = 1;
        }
        else if (!strcmp(argv[i],"-rnd") && !frndnome && !fnome) {
            frndnome = 1;
            conf->nome = 0;
        }
        else if (!strcmp(argv[i],"?") ||
             !strcmp(argv[i], "--help") ||
             !strcmp(argv[i], "-h"))
            Version();
        else if (!fnome && !frndnome
                && i+1 <argc && argv[i][0] != '-'
                && argv[i+1][0] != '-') {
                        strcpy(conf->nomecognome, argv[i]);
            strcat(conf->nomecognome, " ");
            strcat(conf->nomecognome, argv[++i]);
            fnome = 1;
            
                }
        else {
                    fprintf(stderr,
                "EdilAna: errore negli argomenti: \"%s\"\n"
                "          prova --help o ? o -h per l'help\n",
                argv[i]
            );
            exit(16);
        }
        }
    /* manca il nome da anagrammare */
    if (!fnome && !frndnome && !conf->random && !conf->nome)
        Uscita(MANCA_NOME);

    /* attiviamo la lista di default, se e' richiesto un nome a caso */
    if ((frndnome || conf->random) && !fls)
        fls = 1;

    /* si vuole caricare una lista di nomi esterna */
    if (fls)
        *numnomi = CostruisciTabella(np,conf->listanomi,*numnomi,MAXNOMI);

    /* selezioniamo un nome, casualmente */
    if ((frndnome || conf->random) && !fnome && !conf->nome) {
            if (!*numnomi)
            Uscita(MANCA_LISTA_NOMI);
        sprintf(stemp, "%c0\n", comando[19]);
        UsaListaNomi(np, numnomi, stemp, comando);
        Stripnl(stemp);
        strcpy(conf->nomecognome,&stemp[1]);
    }

    /* il nome -- con spazio -- e' troppo lungo */
        if (strlen(conf->nomecognome) > MAXLNOME)
                Uscita(NOME_LUNGO);
    
    /* un titolo, sotto Amiga */
    /* questo titolo nascondeva un baco nella gestione del rilevamento dei tasti! */
    /* 2.11.2008 */
/*
    #ifdef AMIGA
    if (fopen("CON:0/0/640/10/EdilAna","r") == NULL)
        Uscita(NO_CON);
    #endif
*/

    /* e' buona educazione salutare */
    IoDico(BUON_GIORNO);

    /* se abbiamo trovato un logfile, diciamolo */
    if (config)
        IoDico(TROVATO_CONFIGFILE);

    /* costruiamo la tabella-firma del nome */
    strcpy(stemp,conf->nomecognome);
    *Lungh = StringaBase(stemp,tab);

    /* cerchiamo i lemmi del vocabolario contenuti nel nome */
    if ((*Candi = CercaCandidate(tab,conf->vocabolario,NOMECANDI,&Maxls,OFF)) < 0)
        Uscita(MANCA_VOCAB);

    /* apriamo il logfile, contando gli anagrammi ed i nomi presenti */
    SettaLogfile(conf->logfile,ContaAnag);

    /* stampiamo chi vogliamo anagrammare e il numero delle
     * sue candidate
     */

	printTotCandi (conf->nomecognome, *Candi);


    /* stampiamo le candidate... se ce ne sono */
    if (Maxls)
        StampaCol(NOMECANDI,1,&i,Maxls,OFF,OFF,stemp);


return Maxls;
}
